﻿Imports System.Data
Imports System.Web.UI
Imports System
Imports System.Web.UI.WebControls
Imports System.Data.DataRow
Imports Bussines.entity
Imports Bussines.logic
Imports System.Collections.Generic
Imports Microsoft.SharePoint
Imports AjaxPro
Imports System.Net
Imports System.Net.Mail
Imports System.Xml
Imports System.IO
Imports Outlook = Microsoft.Office.Interop.Outlook

Partial Class actaInvitacion
    Inherits System.Web.UI.Page

    Dim equipoBL As New equiposBL
    Dim actaBL As New actasBL
    Dim Util As New utiles()
    Dim IDACTASharepoint As String
    Dim idActa As Integer
    Dim CONSTANTES As New CONSTANTES
    Dim AccionesWF As New AccionesWF
    Dim NumeroActa As String = ""
    Dim IDINVITACIONSharepoint As String = ""
    Dim idInvitacion As Integer

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        AjaxPro.Utility.RegisterTypeForAjax(GetType(actaInvitacion))

        If (Page.IsPostBack = False) Then
            Lbdenominacion.Text = New actasBL().RecuperarDenominacionActual.ToString
            Dim blInvitacion As New invitacionBL
            IDINVITACIONSharepoint = Request.QueryString("ID")
            idInvitacion = blInvitacion.obtenerCodigoInvitacionxidSharepoint(IDINVITACIONSharepoint)

            If idInvitacion <> Nothing Then
                Dim dtInvitacion As New DataTable
                dtInvitacion = blInvitacion.ListarInvitacionXId_VistaPrevia(idInvitacion)

                If dtInvitacion.Rows.Count > 0 Then
                    REM aqui comenzare mi codigo
                    ' AutoCompleteExtender1.UseContextKey = True
                    'AutoCompleteExtender1.ContextKey = "ID"

                    'ddlEquipoTrabajo.DataSource = equipoBL.listarEquipos()
                    'ddlEquipoTrabajo.DataTextField = "descripcion"
                    'ddlEquipoTrabajo.DataValueField = "equipo_id"
                    'ddlEquipoTrabajo.DataBind()


                    Dim lugarBL As New lugarBL
                    ddllugar.DataSource = lugarBL.listarLugares
                    ddllugar.DataValueField = "idlugar"
                    ddllugar.DataTextField = "lugar"
                    ddllugar.DataBind()

                    'txtsemana.Text = numeroSemana("").ToString()
                    txtFechaActa.Text = Date.Now().ToString("dd/MM/yyyy")
                    'txtFechaActa.Attributes.Add("onBlur", "javascript:numeroSemanaInvitacion(this,'" + txtsemana.ClientID + "');")

                    'asignar valor a controles
                    txtinicio.Attributes.Add("onBlur", "javascript:mostrarHorasInvitacion('" & Me.txtinicio.ClientID & "','" & Me.txtfin.ClientID & "')")
                    txtfin.Attributes.Add("onBlur", "javascript:mostrarHorasInvitacion('" & Me.txtinicio.ClientID & "','" & Me.txtfin.ClientID & "')")

                    '*********************************************************** 
                    'llenar la informacion de los campos de textbox y listbox de la cabecera y detalle
                    'txtEquipo.Text = dtInvitacion.Rows(0).Item("EQUIPO").ToString
                    txtidInvitacionSharepoint.Value = IDINVITACIONSharepoint
                    'txtidInvitacion.Value = idInvitacion.ToString
                    txtAsunto.Text = dtInvitacion.Rows(0).Item("Asunto").ToString
                    'txtidAsunto.Value = dtInvitacion.Rows(0).Item("idAsunto").ToString
                    txtArea.Text = dtInvitacion.Rows(0).Item("Area").ToString
                    ' txtidArea.Value = dtInvitacion.Rows(0).Item("idArea").ToString
                    txtmoderador.Text = dtInvitacion.Rows(0).Item("Moderador").ToString
                    ' txtidmodderador.Value = dtInvitacion.Rows(0).Item("IDMODERADOR").ToString
                    'txtsecretario.Text = dtInvitacion.Rows(0).Item("Secretario").ToString
                    'txtidSecretario.Value = dtInvitacion.Rows(0).Item("idSecretario").ToString
                    txtfacilitador.Text = dtInvitacion.Rows(0).Item("Facilitador").ToString
                    'txtidFacilitador.Value = dtInvitacion.Rows(0).Item("idFacilitador").ToString
                    txtFechaActa.Text = Util.formatearFecha(dtInvitacion.Rows(0).Item("fecha").ToString, 2)
                    txtinicio.Text = dtInvitacion.Rows(0).Item("inicio").ToString()
                    txtfin.Text = dtInvitacion.Rows(0).Item("fin").ToString()
                    'txtduracion.Text = dtInvitacion.Rows(0).Item("duracion").ToString()
                    'txtsemana.Text = dtInvitacion.Rows(0).Item("semana").ToString()
                    txtOtroLugar.Text = dtInvitacion.Rows(0).Item("OTROLUGAR").ToString()
                    ftbObservacion.Text = dtInvitacion.Rows(0).Item("Observacion").ToString()
                    txtnumInvitacion.Text = dtInvitacion.Rows(0).Item("Invitacion_num").ToString()
                    txtNroAnexoOrg.Text = dtInvitacion.Rows(0).Item("ANEXO_TELEFONO_MOD")
                    txtNroAnexoFacilitador.Text = dtInvitacion.Rows(0).Item("ANEXO_TELEFONO_FAC")

                    txtNroAnexoOrg.ReadOnly = True
                    txtNroAnexoFacilitador.ReadOnly = True


                    Dim itemEQ As ListItem
                    itemEQ = ddlEquipoTrabajo.Items.FindByValue(dtInvitacion.Rows(0).Item("Equipo_id").ToString)
                    If Not itemEQ Is Nothing Then
                        ddlEquipoTrabajo.SelectedValue = itemEQ.Value
                        AutoCompleteExtender1.UseContextKey = True
                        AutoCompleteExtender1.ContextKey = itemEQ.Value
                    End If



                    Dim itemLugar As ListItem
                    itemLugar = ddllugar.Items.FindByValue(dtInvitacion.Rows(0).Item("idlugar").ToString)
                    If Not itemLugar Is Nothing Then
                        ddllugar.SelectedValue = itemLugar.Value
                        If itemLugar.Value = "-1" Then
                            pnlOtroLugar.Visible = True
                        Else
                            pnlOtroLugar.Visible = False
                        End If
                    End If


                    'txtLugar.Text = dtInvitacion.Rows(0).Item("LUGAR").ToString

                    Dim intIdLugar As Integer
                    intIdLugar = Convert.ToInt32(dtInvitacion.Rows(0).Item("idlugar").ToString())
                    If intIdLugar = -1 Then
                        pnlOtroLugar.Visible = True
                    Else
                        pnlOtroLugar.Visible = False
                    End If
                    gvAsistentes.DataSource = blInvitacion.ListarInvitacionXAsistentes(idInvitacion)
                    gvAsistentes.DataBind()
                End If
            End If


        End If
        'Response.Write(duracion("02:20", "05:30"))
        'ResizeHeight()
    End Sub

    Protected Sub gvAsistentes_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim text1 As TextBox
            Dim text2 As TextBox
            Dim hidden As HiddenField

            text1 = New TextBox
            text1 = CType(e.Row.FindControl("txtcargoAsistente"), TextBox)
            text1.Text = DataBinder.Eval(e.Row.DataItem, "cargo").ToString()

            hidden = New HiddenField
            hidden = CType(e.Row.FindControl("txtidCorrelativo"), HiddenField)
            hidden.Value = DataBinder.Eval(e.Row.DataItem, "idCorrelativo").ToString()

            hidden = New HiddenField
            hidden = CType(e.Row.FindControl("txtidAsistente"), HiddenField)
            hidden.Value = DataBinder.Eval(e.Row.DataItem, "idAsistente").ToString()

            'bloqueamos el cargo si tiene un asistente elegido 
            'para que no puedan editar el cargo si han elegido un empleado interno
            If hidden.Value <> "" Then
                text1.Enabled = False
            End If

            text2 = New TextBox
            text2 = CType(e.Row.FindControl("txtnomAsistente"), TextBox)
            text2.Text = DataBinder.Eval(e.Row.DataItem, "nombre").ToString()


            Dim elim As ImageButton
            elim = CType(e.Row.FindControl("ibelimAsistente"), ImageButton)
            elim.CommandArgument = e.Row.RowIndex.ToString()
            elim.CommandName = "Eliminar"

            If ViewState("EstadoActa") IsNot Nothing Then
                elim.Visible = False
            End If
            'verifico sin la fila ha sido eliminada logicamente
            Dim strActivo As String = DataBinder.Eval(e.Row.DataItem, "activo").ToString
            If strActivo = "0" Then
                e.Row.Style.Add("display", "none")
            End If

        End If
    End Sub

    Private Sub agregarAsistentes()
        Dim dr As GridViewRow
        Dim cargo, nombre, idAsistente, idCorre As String
        Dim dtAcu As New DataTable
        'creamos un datatable con las columnas que ya estan definidas
        dtAcu = crearTableAsistentes()
        Dim Usuario As New usuariosBL
        For Each dr In gvAsistentes.Rows
            'dr.RowIndex()
            Dim drAcu As DataRow
            drAcu = dtAcu.NewRow()

            Dim text As New TextBox
            Dim hidden As New HiddenField
            'recojo el id del asistente seleccionado
            hidden = CType(dr.FindControl("txtidAsistente"), HiddenField)
            idAsistente = hidden.Value

            'recojo el nombre del asistente seleccionado
            text = CType(dr.FindControl("txtnomAsistente"), TextBox)
            nombre = text.Text.Trim()

            'recojo el cargo del asistente seleccionado
            text = New TextBox
            text = CType(dr.FindControl("txtcargoAsistente"), TextBox)
            cargo = text.Text

            hidden = New HiddenField
            hidden = CType(dr.FindControl("txtidCorrelativo"), HiddenField)
            idCorre = hidden.Value
            Dim dtUsu As New DataTable
            If (idAsistente.Trim <> "") Then
                dtUsu = Usuario.listarUsuarioxId(idAsistente)
                If dtUsu.Rows.Count > 0 Then
                    nombre = dtUsu.Rows(0).Item("NOMBRE").ToString()
                    cargo = dtUsu.Rows(0).Item("CARGO").ToString()
                    idAsistente = dtUsu.Rows(0).Item("ID").ToString()
                End If
            End If


            drAcu("idCorrelativo") = idCorre
            drAcu("idAsistente") = idAsistente
            drAcu("num") = dr.Cells(0).Text
            drAcu("nombre") = nombre
            drAcu("cargo") = cargo
            drAcu("activo") = gvAsistentes.DataKeys(dr.RowIndex).Item("activo").ToString
            dtAcu.Rows.Add(drAcu)
        Next
        ViewState("Asistentes") = dtAcu
    End Sub

    Protected Sub gvAsistentes_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
        'agregamos los asistentes modificados del gridview
        agregarAsistentes()

        If e.CommandName = "Eliminar" Then
            Dim intRow As Integer
            Dim dt As New DataTable
            Dim obj As Object
            obj = ViewState("Asistentes")
            intRow = Convert.ToInt32(e.CommandArgument.ToString())
            If Not obj Is Nothing Then
                dt = CType(obj, DataTable)
                dt.Rows(intRow).Item("activo") = "0"
                ViewState("Asistentes") = dt
                'verifico si esta vacio el datatable para llenarlo con una fila
                If dt.Rows.Count = 0 Then
                    'metodo que llena una fila al datatable y si no existe lo crea el datatable y le agrega una fila
                    llenarAsistentes()
                Else
                    Dim dr As DataRow
                    Dim intCon As Integer = 1
                    For Each dr In dt.Rows
                        If Not dr("activo") = "0" Then
                            dr("num") = intCon.ToString()
                            dr("nombre") = dr("nombre")
                            dr("cargo") = dr("cargo")
                            dr("idAsistente") = dr("idAsistente")
                            dr("idCorrelativo") = dr("idCorrelativo")
                            dr("activo") = dr("activo")
                            intCon += 1
                        Else
                            dr("num") = "0"
                        End If


                    Next
                End If
                gvAsistentes.DataSource = dt
                gvAsistentes.DataBind()
            End If
        End If

        'generamos el textare para cuando se ingrese valos multiples
        crecerTextArea()
        ResizeHeight()
    End Sub
    Private Sub crecerTextArea()
        ScriptManager.RegisterStartupScript(Page, Page.GetType, "demo", "Redimensionar();", True)
    End Sub
    Public Sub ResizeHeight()
        ScriptManager.RegisterStartupScript(Page, Page.GetType, "Resize", "javascript:recargarFrame()", True)
    End Sub
    Private Sub llenarAsistentes()
        Dim dt As New DataTable
        Dim obj As Object
        obj = CType(ViewState("Asistentes"), DataTable)

        If (Not obj Is Nothing) Then
            dt = CType(obj, DataTable)
            'ScriptManager.RegisterStartupScript(Page, Page.GetType, "demo", "alert('" + dt.Rows(0).Item(2).ToString() + "');", True)
        Else
            dt = crearTableAsistentes()
        End If
        Dim drs() As DataRow = dt.Select("activo = 1")
        Dim dr As DataRow
        dr = dt.NewRow()
        dr("num") = (drs.Length + 1).ToString()
        dr("idCorrelativo") = ""
        dr("idAsistente") = ""
        dr("id") = ""
        dr("nombre") = ""
        dr("cargo") = ""
        dr("activo") = "1"
        dt.Rows.Add(dr)
        gvAsistentes.DataSource = dt
        gvAsistentes.DataBind()
        ViewState("Asistentes") = dt
    End Sub

    Private Function crearTableAsistentes() As DataTable
        Dim dt As New DataTable
        dt.Columns.Add(New DataColumn("idCorrelativo", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("id", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("num", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("idAsistente", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("nombre", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("cargo", Type.GetType("System.String")))
        dt.Columns.Add(New DataColumn("activo", Type.GetType("System.String")))
        Return dt
    End Function

    Public Function verificarPermisos() As Boolean
        Dim intID As Integer = Convert.ToInt32(Request.QueryString("ID"))
        Dim Util As New utiles()
        
        Dim SystemAdm As String = ConfigurationManager.AppSettings(CONSTANTES.usuarioPrivilegio)
        Dim site As SPSite = New SPSite("demo") 'impersonalizar()
        Dim Web As SPWeb = site.OpenWeb()
        Dim lista As SPList = Web.Lists(ConfigurationManager.AppSettings(CONSTANTES.listaActas).ToString())

        Dim _item As SPListItem = lista.GetItemById(intID)
        Dim _usuActual As SPUser = Web.SiteUsers(HttpContext.Current.User.Identity.Name.ToString())
        Dim _usuAdmin As SPUser = Web.SiteUsers(SystemAdm)

        'Response.Write(_usuActual.LoginName & " " & _usuAdmin.LoginName)

        If _usuAdmin.LoginName <> _usuActual.LoginName Then
            Dim blnActivo As Boolean = False
            Dim _ColeccionRoles As SPRoleAssignmentCollection = _item.RoleAssignments
            For Each _rol As SPRoleAssignment In _ColeccionRoles
                If _rol.Member.GetType().ToString() = "Microsoft.SharePoint.SPUser" Then
                    Dim _User As SPUser = DirectCast(_rol.Member, SPUser)

                    If _User.LoginName = _usuActual.LoginName Then
                        blnActivo = True
                        Exit For
                    End If
                ElseIf _rol.Member.GetType().ToString() = "Microsoft.SharePoint.SPGroup" Then
                    Dim groupName As String = _rol.Member.ToString()
                    Dim _Group As SPGroup = Web.SiteGroups(groupName)
                    Dim _users As SPUserCollection = _Group.Users
                    For Each _User As SPUser In _users

                        If _User.LoginName = _usuActual.LoginName Then
                            blnActivo = True
                            Exit For
                        End If
                    Next
                End If
            Next


            If blnActivo = False Then
                Response.Redirect(ConfigurationManager.AppSettings("Form_Nopermitido").ToString())
                Return False
            End If

        End If
        Return True

    End Function

   

    <AjaxMethod()> _
    Public Function numeroSemana(ByVal strFecha As String) As Integer
        If (strFecha.Length = 10) Then
            Dim fecha As New DateTime(strFecha.Substring(6, 4), strFecha.Substring(3, 2), strFecha.Substring(0, 2))
            Return DateDiff(DateInterval.WeekOfYear, New DateTime(fecha.Date.Year, 1, 1), fecha.Date)
        Else
            Return DateDiff(DateInterval.WeekOfYear, New DateTime(Date.Now.Year, 1, 1), Date.Now)

        End If
    End Function

    Protected Sub ddlEquipoTrabajo_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)

        'If ddlEquipoTrabajo.SelectedValue.Trim = "" Then
        '    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "equipoVacio", "alert('Elija un equipo del la seleccion multiple');", True)
        '    Return
        'End If

        gvAsistentes.DataSource = BuscarEmpleados()
        gvAsistentes.DataBind()
        limpiarCamposDependientes()
        'asigno un valor al selected values de autocomplete extender 
        'AutoCompleteExtender1.ContextKey = ddlEquipoTrabajo.SelectedValue

        crecerTextArea()
        ResizeHeight()
    End Sub

    Public Sub limpiarCamposDependientes()
        'txtidAsunto.Value = ""
        txtAsunto.Text = ""
        'txtidmodderador.Value = ""
        txtmoderador.Text = ""
        'txtidSecretario.Value = ""
        'txtsecretario.Text = ""
        'txtidFacilitador.Value = ""
        txtfacilitador.Text = ""
    End Sub

    Public Function BuscarEmpleados() As DataTable
        Dim dtEmpleados As New DataTable
        Dim AccionesWF As New AccionesWF
        Dim equipoBL As New equiposBL
        Dim strGrupo As String '= equipoBL.recuperarGrupoIntegrante(ddlEquipoTrabajo.SelectedValue)
        Dim strGrupoModeradores As String '= equipoBL.recuperarGrupoModeradores(ddlEquipoTrabajo.SelectedValue)

        'strGrupo = Util.SepararCuenta(strGrupo)
        'strGrupoModeradores = Util.SepararCuenta(strGrupoModeradores)

        Dim sitio As SPSite = impersonalizar()
        Dim web As SPWeb = sitio.OpenWeb()
        Try
            Dim Grupo As SPGroup = web.SiteGroups(strGrupo)
            Dim GrupoModeradores As SPGroup = web.SiteGroups(strGrupoModeradores)

            Dim users As SPUserCollection = Grupo.Users
            Dim UsersModeradores As SPUserCollection = GrupoModeradores.Users

            Dim intcont As Integer = 0
            Dim objXmlDocument As XmlDocument = New XmlDocument


            Dim objXmlNode As XmlNode

            '//creacion del objeto nodo elemento
            objXmlNode = objXmlDocument.CreateElement("Usuarios")
            '//agregacion del nodo al documento
            objXmlDocument.AppendChild(objXmlNode)

            For Each User As SPUser In users
                intcont += 1
                'User.LoginName
                objXmlNode = objXmlDocument.CreateElement("usuario")
                objXmlDocument.DocumentElement.PrependChild(objXmlNode)

                Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
                Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())

                objXmlNode.AppendChild(nodeCuenta)
                nodeCuenta.AppendChild(TextCuenta)

            Next

            For Each User As SPUser In UsersModeradores
                'User.LoginName
                objXmlNode = objXmlDocument.CreateElement("usuario")
                objXmlDocument.DocumentElement.PrependChild(objXmlNode)

                Dim nodeCuenta As XmlElement = objXmlDocument.CreateElement("cuenta")
                Dim TextCuenta As XmlText = objXmlDocument.CreateTextNode(User.LoginName.ToString())

                objXmlNode.AppendChild(nodeCuenta)
                nodeCuenta.AppendChild(TextCuenta)

            Next


            dtEmpleados = equipoBL.BuscarEmpleadosMasa(objXmlDocument)


            web.Close()
            sitio.Close()
            Return dtEmpleados
        Catch ex As Exception
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "noGrupo", "alert('No Existe el grupo de integrantes para este equipo');", True)
            Return dtEmpleados
        End Try

    End Function

    'para inporsonalizar los items
    Private Function impersonalizar() As SPSite
        Dim miSite As New SPSite(ConfigurationManager.AppSettings(CONSTANTES.siteACTA))
        Dim miWeb As SPWeb = miSite.OpenWeb()
        Dim user As SPUser = miWeb.AllUsers(ConfigurationManager.AppSettings(CONSTANTES.usuarioPrivilegio))

        Dim mitoken As SPUserToken = user.UserToken
        miSite = New SPSite(ConfigurationManager.AppSettings(CONSTANTES.siteACTA), mitoken)
        Return miSite
    End Function


    Protected Sub lbRetornar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbRetornar.Click, lbRetornar1.Click
        Response.Write("<script>window.parent.location.href='" & ConfigurationManager.AppSettings("bandejaInvitacion").ToString() & "';</script>")
    End Sub


End Class
